package com.augurit.gzcgwsp.excelimportexport.service.impl;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.util.Region;
import org.dozer.DozerBeanMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.augurit.gzcgwsp.excelimportexport.dao.YwRqQyjyxkRqjszzysbDao;
import com.augurit.gzcgwsp.excelimportexport.entity.YwRqQyjyxkRqjszdjb;
import com.augurit.gzcgwsp.excelimportexport.entity.YwRqQyjyxkRqjszrypbqk;
import com.augurit.gzcgwsp.excelimportexport.entity.YwRqQyjyxkRqjszzysb;
import com.augurit.gzcgwsp.excelimportexport.service.IYwRqQyjyxkRqjszzysbService;
import com.augurit.gzcgwsp.rqqyjyxk.dao.YwRqQyjyxkFinalRqjszzysbDao;
import com.augurit.gzcgwsp.rqqyjyxk.entity.YwRqQyjyxkFinalRqjszdjb;
import com.augurit.gzcgwsp.rqqyjyxk.entity.YwRqQyjyxkFinalRqjszrypbqk;
import com.augurit.gzcgwsp.rqqyjyxk.entity.YwRqQyjyxkFinalRqjszzysb;

@Service
@Transactional
public class YwRqQyjyxkRqjszzysbServiceImpl implements IYwRqQyjyxkRqjszzysbService{

    	@Autowired
    	private YwRqQyjyxkRqjszzysbDao ywRqQyjyxkRqjszzysbDao;
	    @Autowired
	    private YwRqQyjyxkFinalRqjszzysbDao ywRqQyjyxkFinalRqjszzysbDao;
	
	/**
	 * 保存 六、1 主要设备
	 * @param ywRqQyjyxkRqjszzysb
	 */
	public void save(YwRqQyjyxkRqjszzysb ywRqQyjyxkRqjszzysb){
		ywRqQyjyxkRqjszzysbDao.save(ywRqQyjyxkRqjszzysb);
		
	}
	
	/**
	 * 解析 六、1 人员配备情况
	 * @param hssfsheet
	 * @param acceptNo
	 * @param qyid
	 * @return
	 */
	public YwRqQyjyxkRqjszzysb parseRqjszzysb(HSSFSheet hssfsheet, String acceptNo,Long qyid, String username,Date dateFlag,String flag) {
		String projectName = null;//项目名称
		String xh = null;//型号
		String count = null;//数量
		String backupCount=null;//后备数量
		try {
			HSSFRow hssfrow = hssfsheet.getRow(0);// 第一行
			// 遍历该行所有的行,j表示行数 getPhysicalNumberOfRows行的总数
			for (int i = 12; i < 18; i++) {
				hssfrow = hssfsheet.getRow(i);
				// 判断是否还存在需要导入的数据
				if (hssfrow == null) {
					// System.out.println("这里已没有数据，在第" + i + "列,第" + j + "行");
					break;
				}			
				
				if (hssfrow.getCell((short) 2) == null) {//项目名称
					projectName = "";
				} else if (hssfrow.getCell((short) 2).getCellType() == 0) {
					projectName = new Double(hssfrow.getCell((short) 1).getNumericCellValue()).toString();
				} else {// 如果EXCEL表格中的数据类型为字符串型
					projectName = hssfrow.getCell((short) 2).getStringCellValue().trim();
				}
				if (hssfrow.getCell((short) 3) == null) {//型号
					xh = "";
				} else if (hssfrow.getCell((short) 3).getCellType() == 0) {
					xh = new Double(hssfrow.getCell((short) 3).getNumericCellValue()).toString();
				} else {// 如果EXCEL表格中的数据类型为字符串型
					xh = hssfrow.getCell((short) 3).getStringCellValue().trim();
				}
				if (hssfrow.getCell((short) 4) == null) {//数量
					count = "";
				} else if (hssfrow.getCell((short) 4).getCellType() == 0) {
					count = new Double(hssfrow.getCell((short) 4).getNumericCellValue()).toString();
				} else {// 如果EXCEL表格中的数据类型为字符串型
					count = hssfrow.getCell((short) 4).getStringCellValue().trim();
				}
				if (hssfrow.getCell((short) 5) == null) {//备用数
					backupCount = "";
				} else if (hssfrow.getCell((short) 5).getCellType() == 0) {
					backupCount = new Double(hssfrow.getCell((short) 5).getNumericCellValue()).toString();
				} else {// 如果EXCEL表格中的数据类型为字符串型
					backupCount = hssfrow.getCell((short) 5).getStringCellValue().trim();
				}
				if(StringUtils.isEmpty(projectName)||"待续".equals(projectName)){
					break;
				}else{
					YwRqQyjyxkRqjszzysb ywRqQyjyxkRqjszzysb = new YwRqQyjyxkRqjszzysb();
					ywRqQyjyxkRqjszzysb.setQyid(qyid);
					ywRqQyjyxkRqjszzysb.setAcceptNo(acceptNo);
					ywRqQyjyxkRqjszzysb.setUserName(username);
					ywRqQyjyxkRqjszzysb.setUploadDate(new Date());
					ywRqQyjyxkRqjszzysb.setFlag(flag);
					ywRqQyjyxkRqjszzysb.setProjectName(projectName);
					ywRqQyjyxkRqjszzysb.setXh(xh);
//					if(count!=""&&count!=null)
//					{
//					ywRqQyjyxkRqjszzysb.setCount(Long.parseLong(count));
//					}
//					if(backupCount!=""&&backupCount!=null)
//					{
//					ywRqQyjyxkRqjszzysb.setBackupCount(Long.parseLong(backupCount));
//					}
					ywRqQyjyxkRqjszzysb.setDateFlag(dateFlag);	
					this.save(ywRqQyjyxkRqjszzysb);
				}					
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
    public Map importFinalQyData(String acceptNo, Long qyid) {
        List<YwRqQyjyxkRqjszzysb> list=this.getDatas(acceptNo, qyid);
        for(YwRqQyjyxkRqjszzysb entity:list){
            YwRqQyjyxkFinalRqjszzysb finalentity = new DozerBeanMapper().map(entity, YwRqQyjyxkFinalRqjszzysb.class);
            finalentity.setId(null);
            this.ywRqQyjyxkFinalRqjszzysbDao.save(finalentity);
        }
        return null;
    }
    
    /**
     * 
     * @return
     */
    private List<YwRqQyjyxkRqjszzysb> getDatas(String acceptNo, Long qyid){
        String hql = "from YwRqQyjyxkRqjszzysb  where qyid='" + qyid + "' and acceptNo='"+acceptNo+"'";
        return this.ywRqQyjyxkRqjszzysbDao.find(hql);
    }

    /**
     * 导出人员配备
     */
    public void expRqjszrysb(HSSFSheet hssfsheet,
            Object obj, String acceptNo,
            long qyid, String username, String flag, HSSFCellStyle cs,
            String exptype) {
        if("qyxx".equals(exptype)){
        	YwRqQyjyxkFinalRqjszdjb jszdj=(YwRqQyjyxkFinalRqjszdjb) obj;
            List<YwRqQyjyxkFinalRqjszzysb> entityList =getZySbByGqzid(jszdj.getId());
            if(entityList == null || entityList.size() <= 0) 
                return ;
            if(entityList!=null)
            {
            try {
                /**
                 * i代表生成的列表行，j表示数据的下标
                 */
                for(int i = 12, j = 0; j<8; i++){
                    if(i < 12) continue;
                    
                    YwRqQyjyxkFinalRqjszzysb entity = entityList.get(j);
                    if(entity != null){
                        HSSFRow row = hssfsheet.createRow(i);// 创建一个行对象
                        HSSFCell cell0 = row.createCell(2);// 在本行的第一个单元格中写入数据
                        HSSFRichTextString text0 = new HSSFRichTextString(entity.getProjectName()==null?"":entity.getProjectName());// 声明文本内容
                        cell0.setCellValue(text0);// 将文本对象加入单元格
                        cell0.setCellStyle(cs);
                        
                        HSSFCell cell40 = row.createCell(4);// 在本行的第一个单元格中写入数据
                        HSSFCell cell4 = row.createCell(3);// 在本行的第一个单元格中写入数据
                        String xh=entity.getXh()==null?"":entity.getXh();
                        HSSFRichTextString text4 = new HSSFRichTextString(xh);// 声明文本内容
                        cell4.setCellValue(text4);// 将文本对象加入单元格
                        cell4.setCellStyle(cs);
                        cell40.setCellStyle(cs);
                        HSSFCell cell1 = row.createCell(5);// 在本行的第一个单元格中写入数据
                        HSSFCell cell6 = row.createCell(6);// 在本行的第一个单元格中写入数据
                        Long count=entity.getCount()==null?0l:entity.getCount();
                        HSSFRichTextString text1 = new HSSFRichTextString(String.valueOf(count));// 声明文本内容
                        cell1.setCellValue(text1);// 将文本对象加入单元格
                        cell1.setCellStyle(cs);
                        cell6.setCellStyle(cs);
                        HSSFCell cell2 = row.createCell(7);// 在本行的第一个单元格中写入数据
                        Long backupcount=entity.getCount()==null?0l:entity.getBackupCount();
                        HSSFRichTextString text2 = new HSSFRichTextString(String.valueOf(backupcount));// 声明文本内容
                        cell2.setCellValue(text2);// 将文本对象加入单元格
                        cell2.setCellStyle(cs);
                    }
                    j++;
                }
            } catch (Exception e){
                e.printStackTrace();
            }
            }
        }else{
            YwRqQyjyxkRqjszdjb jszdj=(YwRqQyjyxkRqjszdjb) obj;
            List<YwRqQyjyxkRqjszzysb> entityList = this.getListByQyId(jszdj.getId());
            if(entityList == null || entityList.size() <= 0)
                return ;
            if(entityList!=null)
            {
            try {
                /**
                 * i代表生成的列表行，j表示数据的下标
                 */
                for(int i = 12, j = 0; j< entityList.size(); i++){
                    if(i < 12) continue;
                    YwRqQyjyxkRqjszzysb entity = entityList.get(j);
                    if(entity != null){
                        HSSFRow row = hssfsheet.createRow(i);// 创建一个行对象
                        HSSFCell cell0 = row.createCell(2);// 在本行的第一个单元格中写入数据
                        HSSFRichTextString text0 = new HSSFRichTextString(entity.getProjectName()==null?"":entity.getProjectName());// 声明文本内容
                        cell0.setCellValue(text0);// 将文本对象加入单元格
                        cell0.setCellStyle(cs);
                        
                        HSSFCell cell40 = row.createCell(4);// 在本行的第一个单元格中写入数据
                        HSSFCell cell4 = row.createCell(3);// 在本行的第一个单元格中写入数据
                        String xh=entity.getXh()==null?"":entity.getXh();
                        HSSFRichTextString text4 = new HSSFRichTextString(xh);// 声明文本内容
                        cell4.setCellValue(text4);// 将文本对象加入单元格
                        cell4.setCellStyle(cs);
                        cell40.setCellStyle(cs);
                        HSSFCell cell1 = row.createCell(5);// 在本行的第一个单元格中写入数据
                        HSSFCell cell6 = row.createCell(6);// 在本行的第一个单元格中写入数据
                        Long count=entity.getCount()==null?0l:entity.getCount();
                        HSSFRichTextString text1 = new HSSFRichTextString(String.valueOf(count));// 声明文本内容
                        cell1.setCellValue(text1);// 将文本对象加入单元格
                        cell1.setCellStyle(cs);
                        cell6.setCellStyle(cs);
                        HSSFCell cell2 = row.createCell(7);// 在本行的第一个单元格中写入数据
                        Long backupcount=entity.getCount()==null?0l:entity.getBackupCount();
                        HSSFRichTextString text2 = new HSSFRichTextString(String.valueOf(backupcount));// 声明文本内容
                        cell2.setCellValue(text2);// 将文本对象加入单元格
                        cell2.setCellStyle(cs);
                       
                    }
                    j++;
                }
            } catch (Exception e){
                e.printStackTrace();
            }
            }
        }
    }

    private List<YwRqQyjyxkRqjszzysb> getListByQyId(Long id) {
        String sql=" from "+ YwRqQyjyxkRqjszzysb.class.getName()+" where gyzid='"+id+"'";
        return this.ywRqQyjyxkRqjszzysbDao.find(sql);
    }
    
    private List<YwRqQyjyxkFinalRqjszzysb> getZySbByGqzid(Long id) {
        String sql=" from "+ YwRqQyjyxkFinalRqjszzysb.class.getName()+" where gyzid='"+id+"'";
        return this.ywRqQyjyxkRqjszzysbDao.find(sql);
    }

    public List<YwRqQyjyxkRqjszzysb> getzysbDatas(Long id) {
        String sql=" from "+ YwRqQyjyxkRqjszzysb.class.getName()+" where gyzid='"+id+"'";
        return this.ywRqQyjyxkRqjszzysbDao.find(sql);
    }
    
}
